package tst;

import java.io.File;
import java.util.Arrays;

import bootLoader.FakeLoader;

import components.Util;
import components.exceptions.BinaryToIntException;
import components.exceptions.IntToBinaryException;
import components.functionUnits.ALU;
import components.register.RegisterGroup;

public class Test {
	public static void main(String[] args) throws Exception {
		//
		// RegisterGroup.getInstance().setMAR(new int[] { 2, 2, 2, 2, 2 });
		// System.out.println(Arrays
		// .toString(RegisterGroup.getInstance().getMAR()));

		// FakeLoader fl = new FakeLoader();
		// try {
		// fl.init();
		// fl.start();
		// } catch (IntToBinaryException e1) {
		// // TODO Auto-generated catch block
		// e1.printStackTrace();
		// }

		//
		// int[] op1 = { 1, 0, 1, 0 };
		// int[] op1OpArray = new int[8];
		// int i;
		// int OPLEN = 8;
		// for (i = 0; i < op1.length; i++) {
		// op1OpArray[OPLEN - i - 1] = op1[op1.length - i - 1];
		// }
		// for (; i < OPLEN - 1; i++)
		// op1OpArray[OPLEN - i - 1] = 0;
		//
		// System.out.println(Arrays.toString(op1OpArray));

		/***
		 * the following code tests Util.integerToBinary and the
		 * DataOverFlowException
		 */

		// int[] int1 = { 0, 1, 1, 1, 1, 1, 1, 1 };
		// int[] int2 = { 1 };
		//
		// System.out.println(Arrays.toString(ALU.add(int1, int2)));
		// System.out.println(RegisterGroup.getInstance().getCC(
		// RegisterGroup.CC_OVERFLOW));
		//
		// System.out.println(Util.binaryToInt(int1, true) + " + "
		// + Util.binaryToInt(int2, true) + " = "
		// + Util.binaryToInt(ALU.add(int1, int2)));

		/***
		 * the following code tests ALU.tst();
		 */
		// int[] op1 = { 1, 0, 0 };
		// int[] op2 = { 0, 0, 1, 0, 0 };
		//
		// System.out.println(ALU.tst(op1, op2));

		/***
		 * the following code tests Util.trimArray()
		 */
		// int[] op = { 0, 0, 0, 0, 0, 0, 0, 0 };
		//
		// System.out.println(Arrays.toString(Util.trimArray(op)));

		/***
		 * the following code tests ALU.div and ALU.mul
		 */
		// int[] op1 = { 1, 1, 0, 1, 0, 1, 1, 0 };
		// int[] op2 = { 0, 1, 0, 0, 1, 0, 1, 1 };
		// System.out.println(Util.binaryToInt(op1, true) + " / "
		// + Util.binaryToInt(op2, true) + " = "
		// + Util.binaryToInt(ALU.div(op1, op2), true));
		// System.out.println(Arrays.toString(ALU.div(op1, op2)));

		/***
		 * the following code tests Util.binartToInt() and ALU.sub
		 */
		// int[] op1 = { 0 };
		// int[] op2 = { 1 };
		//
		// System.out.println(Util.binaryToInt(op1) + " - "
		// + Util.binaryToInt(op2) + " = "
		// + Util.binaryToInt(ALU.sub(op1, op2), true));

		/****
		 * the following code tests Util.subArray()
		 */
		int[] op1 = { 1 };
		int[] op2 = { 0, 1, 2, 3, 4, 5, 6 };

		// should return 1
		System.out.println(Arrays.toString(Util.subArray(op1, 0, 0)));
		// should return 1-5
		System.out.println(Arrays.toString(Util.subArray(op2, 2, 3)));

	}
}
